﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SISTEMA_ALPROVIDE.Bean;
using SISTEMA_ALPROVIDE.Service;

namespace SISTEMA_ALPROVIDE
{
    public partial class Nueva_Venta : Form
    {
        public int contador=1;
        public string ventana = "venta";
        public Producto producto = new Producto();
        public Cliente cliente = new Cliente();
        public List<LineaVenta> listaLineaVenta = new List<LineaVenta>();
        public ServiceVenta serviceVenta = new ServiceVenta();

        public Nueva_Venta()
        {
            InitializeComponent();
            DateTime saveNow = DateTime.Now;

         //   txtFecha.Text = Convert.ToString(saveNow);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }


        private void btnAceptar_Click(object sender, EventArgs e)
        {
            //Close();

            if (listaLineaVenta.Count == 0)
            {
                MessageBox.Show("No se puede realizar la venta sin ningún producto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else {

                Venta venta = new Venta();
                venta.IdEmpleado = Convert.ToInt32(tbxIdEmpleado.Text);
                venta.Fecha = dtpFecha.Value;
                venta.IdCliente = cliente.DNI;
                venta.Total = 0;
                for (int i = 0; i < listaLineaVenta.Count; i++) {
                    venta.Total += listaLineaVenta[i].Subtotal;
                }
                venta.IdTienda = 11;

                int idVenta = serviceVenta.RegistrarVenta(venta);

                serviceVenta.RegistrarLineaVenta(listaLineaVenta, idVenta);

                Close();
                MessageBox.Show("Se realizo la venta exitosamente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            
        }


        private void btnAgegar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(tbxCantidad.Text))
            {
                int cantidad = Convert.ToInt32(tbxCantidad.Text);

                if (cantidad > producto.Stock)
                {
                    MessageBox.Show("No tenemos suficiente stock", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    double subtotal = cantidad * producto.Precio;
                    tbxPrecio.Text = Convert.ToString(subtotal);

                    LineaVenta linea = new LineaVenta();

                    linea.CantidadProducto = cantidad;
                    linea.IdProducto = producto.IdProducto;
                    linea.PrecioUnitario = producto.IdProducto;
                    linea.Subtotal = subtotal;
                    linea.NombreProducto = producto.NombreProducto;
                     
                    int i = GetItemIndex(Convert.ToInt32(textBox1.Text));

                    if (i == -1)
                    {
                        listaLineaVenta.Add(linea);
                    }

                    else {
                        listaLineaVenta[i].CantidadProducto += linea.CantidadProducto;
                        listaLineaVenta[i].Subtotal += linea.Subtotal;
                    }

                    GridVenta.DataSource = null;
                    GridVenta.DataSource=listaLineaVenta;

                    GridVenta.Columns[0].Visible = false;
                    GridVenta.Columns[6].Visible = false;
                }
            }
            else {
                MessageBox.Show("Coloque un valor en cantidad", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private int GetItemIndex(int idProducto)
        {
            int found = -1;
            bool flag = false;
            if (listaLineaVenta != null) {
                foreach (LineaVenta item in listaLineaVenta) {
                    found++;
                    if (int.Equals(item.IdProducto, idProducto)) {
                        flag = true;
                        break;
                    }
                }
            }

            if (flag == false) {
                found = -1;
            }

            return found;
        }


        private void button1_Click_1(object sender, EventArgs e)
        {
            Busqueda_Producto buscarProducto = new Busqueda_Producto();
            buscarProducto.ShowDialog();
            producto = buscarProducto.producto;
            textBox1.Text = Convert.ToString(producto.IdProducto);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            fmAdministrar_ClienteVenta fmCliente = new fmAdministrar_ClienteVenta(ventana);
            fmCliente.ShowDialog();
            cliente = fmCliente.cliente;
            tbxNombreCliente.Text = cliente.Nombre + " " + cliente.ApellidoPaterno + " " + cliente.ApellidoMaterno;

        }
    }
}
